package vue.noteEleve;

import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

import metier.Eleve;
import metier.Grade;
import metier.NoteEleve;
import metier.Stage;
import vue.commun.JPanJTable;
import vue.commun.JPanRechercherEleve;
import vue.eleve.RechercherEleve;
import configuration.MessageAppli;
import ctr.commun.CommunGest;

public class JPanAffNoteEleve extends RechercherEleve {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -5945510565619147342L;
	private String titre;
	private Eleve eleve;
	private JPanJTable panJTable;
	
	
	/**
	 * Constructeur.
	 * @param titre
	 */
	public JPanAffNoteEleve(String titre) {
		//this.confirmerMod = false;
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Constructeur de copie
	 * @param jPanModifierEleve
	 */
	public JPanAffNoteEleve(JPanAffNoteEleve jPanAffNoteEleve) {
		this.titre = jPanAffNoteEleve.getTitre();
		this.eleve = jPanAffNoteEleve.getEleve();
		afficher();
	}
	
	
	/**
	 * Integration du panel rechercher
	 * @param titre
	 */
	public void afficher() {
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		
		// Recuperation de la liste des stages.
				ArrayList<Stage> lStage = communGest.getListeStage();
		
		if ( lStage != null && !lStage.isEmpty()){
			// Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			// Ajout du panel de recherche dans le panel afficher note eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			this.setBorder(new TitledBorder(titre));
			// Ajout du panel de modification.
			if ( eleve != null ){
				this.add(listeNoteByEleve(eleve), BorderLayout.CENTER);
			}
			
			
		}else{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + " Modification d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	/**
	 * methode afficher liste note pour un eleve
	 */
	public JPanel listeNoteByEleve(Eleve eleve) {
		
		
		if (panJTable == null ){
			getTableauNotesEleve(eleve);
		}
		
		return panJTable;
		
		
		
		
	}
	
	private JPanJTable getTableauNotesEleve(Eleve eleve){
		
		
		//nom des colonnes
		Vector<Object> nomColonne= new Vector<Object>(Arrays.asList(new String[] {"Matière","Note", "date"}));
		
		//valeurs des lignes
		Vector<Vector<Object>> dataVector= new Vector<Vector<Object>>();
		
		CommunGest cg = new CommunGest();
		
		 //Ajout d'un vector note eleve.
		ArrayList<NoteEleve>lNoteEleve =  cg.getListeNoteByEleve(eleve);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
		
		for (NoteEleve lne : lNoteEleve) {
			dataVector.add(new Vector<Object>(Arrays.asList(new Object[]{
				 cg.getLibelleMatiereById(lne.getIdMatiere()).getLibelleMatiere(),
				lne.getNote(),simpleDateFormat.format(lne.getDateNote())	
			})));
		}
		
		//affichage de l abrevation grade avec l'éleve
	    Grade grade = cg.getGrade(eleve.getIdGrade());
		String str_Grade= grade.getAbrev();
		String str_AfficheEleve = str_Grade+" "+eleve.getNomEleve();
		
		panJTable = new JPanJTable(str_AfficheEleve, dataVector, nomColonne, null);
		panJTable.getJtable().setName("tabNoteEleve");
		
		
		
		return panJTable;
	}
	
	
	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		
		return new JPanAffNoteEleve(this);
	}

	public String getTitre() {
		return titre;
	}
	
	
	
	

}
